package com.dragon.modules.yuegou.enums;

import javax.annotation.Nullable;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 大运营平台内置角色
 * 
 * @author liuwu
 *
 */
public enum PlatformRole {

	/**
	 * 超级管理员
	 */
	SUPER_ADMIN("1", SystemRoles.SUPER_ADMIN, "超级管理员", "系统内置角色，具有所有功能的权限"),
	/**
	 * 权限管理员
	 */
	AUTHORIZATION_ADMIN("2", SystemRoles.AUTHORIZATION_ADMIN, "权限管理员", "系统内置角色，具有权限管理的权限，没有其他业务功能的权限"),
	/**
	 * 任意用户
	 */
	ANYONE("3", SystemRoles.ANYONE, "任意用户", "系统内置角色，具有能够正常使用系统的最小功能的权限，所有用户都应该授权这个角色"),
	/**
	 * 只读用户
	 */
	READONLY("4", SystemRoles.READONLY, "只读用户", "系统内置角色，具有所有功能的查看权限，但是不能修改和删除数据");

	/**
	 * 角色ID
	 */
	private final String id;
	
	/**
	 * 角色标识（英文名）
	 */
	private final String key;

	/**
	 * 角色别名（中文名）
	 */
	private final String alias;

	/**
	 * 角色描述
	 */
	private final String description;

	private PlatformRole(String id, String key, String alias, String description) {
		this.id = id;
		this.key = key;
		this.alias = alias;
		this.description = description;
	}

	/**
	 * 角色ID
	 * @return id
	 */
	public String getId() {
		return id;
	}

	/**
	 * 角色标识（英文名）
	 * 
	 * @return key
	 */
	public String getKey() {
		return key;
	}

	/**
	 * 获取角色描述
	 * 
	 * @return description
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * 角色别名（中文名）
	 *
	 * @return alias
	 */
	public String getAlias() {
		return alias;
	}

	/**
	 * 获取系统角色
	 * 
	 * @param key 系统角色标识
	 * @return 洗头膏角色
	 */
	@Nullable
	public static PlatformRole from(String key) {
		if (key == null) {
			return null;
		}
		return CODE_MAP.get(key);
	}

	/**
	 * Code Map for SystemRole
	 */
	private static final Map<String, PlatformRole> CODE_MAP = Stream.of(PlatformRole.values())
			.collect(Collectors.toMap(PlatformRole::getKey, e -> e));

}
